#单行注释

"""
多行注释
"""

# 变量的作用
# 使用变量
my_name ='TOM'
print(my_name)
schoolname='超哥测试提升'
print(schoolname)

# 认识bug
# debugger 显示变量和变量的细节
# console  输出内容
# f7 f8 f9

# 认识数据类型
# 整型
a=1
print(type(a))
# 浮点型
b=1.1
print(type(b))
# 布尔型
c=True
print(type(c))
# 字符串
d='123456'
print(type(d))
# 列表
e=[10,20,30]
print(type(e))
# 元组
f =(10,20,30)
print(type(f))
# 集合
h={10,20,30}
print(type(h))


# 输出
print('hello python')
age=18
print(age)
# 格式化输出
# 需求是输出今年我的年龄是18岁
print('我今年年龄是 %d'% age)
age=18
name='TOM'
weight =75.5
student_id=1
# 我的名字是tom
print("我的名字是 %s" % name)
# 我的学号是0001
print("我的学号是%04d" % student_id)
# 我的体重是75.5公斤
print("我的体重是%.2f公斤" % weight)
# 我的名字是tom，今年18岁
print("我的名字是%s，今年%d岁" %(name,age))
# 我的名字是tom，明年19岁了
print("我的名字是%s,明年%d" % (name,age+1))
# 我的名字是tom，明年19岁了
print(f"我的名字是{name},明年{age+1}岁了")

# 转义字符
# \n 换行
# \t 制表符，一个tab是4个空格
# 结束符
# print("输出的内容",end='\n')
# print("输出的内容",end='\t')

# 输入
# password =input("请输入密码")
# print(f"您输入的密码是{password}")
# print(type(password))

# 转换数据类型的作用
#接收用得输入
# num =input("请输入您的幸运数字")
# print(f"您的幸运数字是{num}")
# print(type(num))
# # 转换数据类型为整型
# print(type(int(num)))

# 转换为浮点
num1=1
print(float(num1))
print(type(float(num1)))

# 整数转换为字符串
num2=10
print(type(str(num2)))

# 列表转换为元组
list1=[10,20,30]
print(tuple(list1))
print(type(tuple(list1)))

# 将一个元组转换为列表
t1=(100,200,300)
print(list(t1))
print(type(list(t1)))

# 将字符串的数据转换为python认识的类型
str1='10'
str2='[1,2,3]'
str3='(1000,2000,3000)'
print(type(eval(str1)))
print(type(eval(str2)))
print(type(eval(str3)))

# 运算符
# 单个变量赋值
num=1
print(num)

# 多个变量赋值
num1,float1,str1=10,0.5,'hello,word'
print(num1)
print(float1)
print(str1)

# 多变量赋相同值
a=b=10
print(a)
print(b)

# 复合赋值运算符
a=100
a+=1
print(a)

b=2
b*=3
print(b)

c=10
c+=1+2
print(c)

# 比较运算符
a=7
b=5
print(a==b)
print(a!=b)
print(a<b)
print(a>b)
print(a<=b)
print(a>=b)

# 逻辑运算符
a=1
b=2
c=3
print((a<b) and (b<c))
print((a>b) and (b<c))
print((a>b) or (b<c))
print(not (a>b))

#拓展
# and运算符，只要有⼀个值为0，则结果为0，否则结果为最后⼀个⾮0数字
a=0
b=1
c=2
print(a and b)
print(b and a)
print(a and c)
print(c and a)
print(b and c)
print(c and b)

# or运算符，只有所有值为0结果才为0，否则结果为第⼀个⾮0数字
print(a or b)
print(a or c)
print(b or c)

# 字符串
a ='hello worid'
b ='abcdefg'
print(type(a))
print(type(b))
name3 =""" tom"""
name4 ="""i an tom
         nice to meet yu!   """
b =""" i am rose nice to meet you !"""

# name = input("请输入您的名字:")
# print(f"您输入的名字是{name}")
# passwod =input("请输入您的密码")
# print(f"您输入的密码是{passwod}")
# print(type(passwod))

# 下标  注意：下标从0开始。
# name ='abcdef'
# print(name[1])
# print(name[0])
# print(name[2])

# 切片
name ='abcdefg'
print(name[2:5:1])
print(name[2:5])
print(name[:5])
print(name[1:])
print(name[:])
print(name[::2])
print(name[:-1])
print(name[-4:-1])
print(name[::-1])

# 字符串的常⽤操作⽅法有查找、修改和判断三⼤类。
# 查找
mystr = "hello world and superctest and chaoge and Python"
print(mystr.find('and'))
print(mystr.find('and',15,30))

print(mystr.index('and'))
print(mystr.index('and',15,30))
# print(mystr.index('ands'))

# rfind()： 和find()功能相同，但查找⽅向为右侧开始。
# rindex()：和index()功能相同，但查找⽅向为右侧开始。
# count()：返回某个⼦串在字符串中出现的次数
print(mystr.count('and'))
print(mystr.count('ands'))
print(mystr.count('and',0,20))

# 修改
print(mystr.replace('and','he'))
print(mystr.replace('amd','he',10))
print(mystr)

print(mystr.split('and'))
print(mystr.split('and',2))
print(mystr.split(' '))
print(mystr.split(' ',2))

list1=['chao','ge','test','promotion']
t1=('aa','bb','cc','ddd')
print('_'.join(list1))
print('...'.join(t1))

# capitalize()：将字符串第⼀个字符转换成⼤写。
mystr = "   hello   world and supertest and chaoge and Python   "
print(mystr.capitalize())

# title()：将字符串每个单词⾸字⺟转换成⼤写。
print(mystr.title())

# lower()：将字符串中⼤写转⼩写。
print(mystr.lower())

# upper()：将字符串中⼩写转⼤写
print(mystr.upper())

# lstrip()：删除字符串左侧空⽩字符。
print(mystr.lstrip())

# rstrip()：删除字符串右侧空⽩字符
print(mystr.rstrip())

# strip()：删除字符串两侧空⽩字符。
print(mystr.strip())

# ljust()：返回⼀个原字符串左对⻬,并使⽤指定字符(默认空格)填充⾄对应⻓度 的新字符串
# rjust()：返回⼀个原字符串右对⻬,并使⽤指定字符(默认空格)填充⾄对应⻓度 的新字符串，语法和
# ljust()相同。
# center()：返回⼀个原字符串居中对⻬,并使⽤指定字符(默认空格)填充⾄对应⻓度 的新字符串，语
# 法和ljust()相同


# 判断
# startswith()：检查字符串是否是以指定⼦串开头，是则返回 True，否则返回 False。如果设置开
# 始和结束位置下标，则在指定范围内检查
mystr = "hello world and supertest and chaoge and Python "
print(mystr.startswith('hello'))

# endswith()：：检查字符串是否是以指定⼦串结尾，是则返回 True，否则返回 False。如果设置开
# 始和结束位置下标，则在指定范围内检查。
print(mystr.endswith('python'))
print(mystr.endswith('Python',2,30))

# isalpha()：如果字符串⾄少有⼀个字符并且所有字符都是字⺟则返回 True, 否则返回 False
mystr1='hello'
mystr2 ='hello12345'
print(mystr1.isalpha())
print(mystr2.isalpha())

# isdigit()：如果字符串只包含数字则返回 True 否则返回 False

mystr1='aaa123'
mystr2 ='12345'
print(mystr1.isdigit())
print(mystr2.isdigit())

# isalnum()：如果字符串⾄少有⼀个字符并且所有字符都是字⺟或数字则返 回 True,否则返回
# False。

mystr1 = 'aaa12345'
mystr2 = '12345-'
print(mystr1.isalnum())
print(mystr2.isalnum())

# isspace()：如果字符串中只包含空⽩，则返回 True，否则返回 False。

mystr1 = '1 2 3 4 5'
mystr2 = ' '
print(mystr1.isspace())
print(mystr2.isspace())

# 条件循环
# while循环
# 需求：复现重复执⾏100次 print('媳妇⼉，我错了')
i =0
while i <5:
    print('我错了')
    i+=1
print('任务结束')


# ：1-100的累加和，即1 + 2 + 3 + 4 +….，即前两个数字的相加结果 + 下⼀个数字( 前⼀个数字 +1
i =1
result=0
while i <=100:
    result+=i
    i+=1
print(result)


# 1-100的偶数和，即 2 + 4 + 6 + 8....，得到偶数的⽅法如下
i=1
result =0
while i <=100:
    if i % 2 ==0:
        result+=i
    i +=1
print(result)

i=0
result =0
while i <=100:
    result+=i
    i+=2
print(result)

# break
i=1
while i <=5:
    if i ==4:
        print(f"吃饱了不吃了")
        break
    print(f'吃了第{i}个苹果')
    i +=1

# continue
i =1
while i <=5:
    if i ==3:
        print(f'大虫子。第{i}个不吃了')
        i +=1
        continue
    print(f'吃了第{i}个苹果')
    i +=1

# while 循环嵌套
j =0
while j <3:

    i =0
    while i <3:
        print('媳妇儿，我错了')
        i +=1
    print('刷晚饭的碗')
    print('一套惩罚结束')
    j +=1

# 打印星号 ⼀⾏输出5个星号，重复打印5⾏
j =0
while j <=4:
    # ⼀⾏星星的打印
    i =0
    while i <=4:
        # ⼀⾏内的星星不能换⾏，取消print默认结束符\n
        print('*',end='')
        i +=1
    # 每⾏结束要换⾏，这⾥借助⼀个空的print，利⽤print默认结束符换⾏
    print()
    j+=1

# 打印星号三角形
# j表示⾏号
j =0
while j <=4:
    # ⼀⾏星星的打印
    i =0
    while i <=j:
        # i表示每⾏⾥⾯星星的个数，这个数字要和⾏号相等所以i要和j联动
        print('*',end='')
        i+=1
    print()
    j +=1

# 九九乘法表
j=1
while j<=9:
    # 打印⼀⾏⾥⾯的表达式 a * b = a*b
    i =1
    while i <=j:
        print(f'{i}*{j}={j*i}',end='\t')
        i +=1
    print()
    j+=1

# for循环
str1='hello'
for i in str1:
    print(i)

# break
str2 ='hello'
for i in str2:
    if i =='e':
        print('遇到e不打印')
        break
    print(i)

# continue

str3 ='hello'
for i in str3:
    if i =='e':
        print('遇到e不打印')
        continue
    print(i)

# else
i =1
while i <=5:
    print("媳妇我错了")
    i +=1
else:
    print('媳妇原谅我了，开心')

# 退出循环
# break
# 所谓else指的是循环正常结束之后要执⾏的代码，即如果是break终⽌循环的情况，else下⽅缩进
# 的代码将不执⾏。
i =1
while i <=5:
    if i ==3:
        print("这里说的不算")
        break
    print("媳妇我错了")
    i +=1
else:
    print("媳妇原谅我了")

# continue
# 因为continue是退出当前⼀次循环，继续下⼀次循环，所以该循环在continue控制下是可以正常
# 结束的，当循环结束后，则执⾏了else缩进的代码
i =1
while i <=5:
    if i ==3:
        print('这边说的不算')
        i+=1
        continue
    print('媳妇我错了1')
    i+=1
else:
    print('媳妇原谅我了.开心呀')


# if 语句
age =18
if age>=18:
    print("允许上网")
print('不能上网')

# age=int(input('请输入您的年龄'))
# if age>=18:
#     print(f"您的年龄是{age}，已经成年，可以上网")
# print('系统关闭')

# if else
# age =int(input('请输入您的年龄'))
# if age >=18:
#     print(f'您的年龄{age},可以上网了')
# else:
#     print(f'您的年龄{age}.未成年')
# print('系统关闭')

# 多重判断
# age= int(input('请输入您的年龄'))
# if age<18:
#     print(f'您的年龄是{age},童工')
# elif 18<=age <=60:
#     print(f'您的年龄是{age},合法工龄')
# elif age >60:
#     print(f'您的年龄是{age},可以退休')

# if嵌套
money=1
stat=1
if money==1:
    print('有钱，可以上车')
    if stat==1:
        print('有空座')
    else:
        print('没有空座')
else:
    print('没钱，不能上车，跑着去')

# 猜拳游戏
# import random
# computr = random.randint(0,2)
# player =int(input('请出拳：0-石头，1-剪刀，2-布'))
# if ((player==0) and (computr==1) or (player==1) and (computr==2) or (player==2) and (computr==0) ):
#     print('玩家获胜')
# elif player==computr:
#     print('平局')
# else:
#     print('电脑获胜')

# 三目运算
a=1
b=2
c =a if a> b else b
print(c)
